home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / uk-sendmail2.1 / Domcheck < prev    next >
Encoding:
Text File  |  1991-06-11  |  1.5 KB  |  68 lines

  1. #!/bin/sh
  2. #
  3. #    Domcheck - Check UK-Sendmail domain data files for obvious blunders
  4. #
  5. #    Copyright (c) 1988 Jem Taylor
  6. #
  7.  
  8. if [ $# -lt 1 ]
  9. then    echo    usage: $0 files...
  10.     exit
  11. fi
  12.  
  13. for i in $@
  14. do
  15.     sed -e 's/#.*//' -e '/^$/d' $i | awk '
  16. BEGIN    { bad=0; ok=1; format=ok }
  17. /%s[     .]/||/%s$/ { printf "%s: line %d - %%s has no meaning in DOMAIN data\n", file, NR 
  18.       format=bad
  19.     }
  20. NF>2    { printf "%s: line %d - %d columns of data\n", file, NR, NF
  21.       format=bad
  22.     }
  23. /[][<>|\\*(){}~`";:,?\/]/ {
  24.       printf "%s: line %d - bogus character\n", file, NR
  25.       format=bad
  26.     }
  27.     { for ( i=1 ; i <=2 ; i++ )
  28.       {    if (substr($i,1,1)==".")
  29.           {    printf "%s: line %d - leading dot column %d\n",\
  30.                     file, NR, i
  31.             format=bad
  32.         }
  33.         if ( substr($i,length($i),1) == "." )
  34.         {    printf "%s: line %d - trailing dot column %d\n",\
  35.                     file, NR, i
  36.             format=bad
  37.         }
  38.       }
  39.       if ( format == bad )
  40.       {    print "    " $0
  41.           format=ok
  42.           errval++
  43.       }
  44.     }
  45. END    { if ( errval > 0 )
  46.         printf "%d errors detected\n", errval
  47.       exit errval
  48.     } ' file=$i -
  49. done
  50.  
  51. # delete everything from first whitespace or first dot in domain declarations
  52. duplicates=`sed -e '/^#/d' -e '/^$/d' $@ \
  53. | awk '{ if (index($1,".")==0 && $1==substr($2,1,index($2,".")-1)) print $2 }'\
  54. | sed -e 's/[.     ].*//' | sort | uniq -d`
  55.  
  56. if [ -n "$duplicates" ]
  57. then
  58.     echo '
  59. ================ Domain entries duplicated or conflicting ================'
  60.     for i in $duplicates
  61.     do
  62.         echo "
  63. --------------        $i        --------------"
  64.         grep "^$i[.     ]" $@ | sed 's/:/:    /'
  65.     done
  66.     exit 99
  67. fi
  68.